МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
З В І Т
До лабораторної роботи №5
з курсу:«Програмування комп’ютерної графіки»
на тему: «Параметрична побудова графіків в залежності від осьової приналежності, шрифтів та типу лінії на екрані комп’ютера»
Варіант №9
Мета роботи: набути практичних навиків в складанні програм для побудови зображень в залежності від заданого типу осі,шрифту,кольору і типу лінії на екрані комп’ютера за допомогою засобів мови С# та бібліотеки OpenGL.
Завдання:
Побудувати графік функції (таблиця 1), заданої таблично. Графік повинен відображати результати розрахунків, які записані у файлі на диску. Масштаб розмітки осей координат графіка повинен відповідати реальним результатам розрахунків. Параметри для побудови графіка визначені в таблиці 2. Варіант завдання визначає викладач.
Необхідно передбачити “плаваючий” центр координат – основну частину екрану мають займати ті чверті, в яких знаходиться графік функції.
9
y=arctg(x)
[-50; 50]
№ варіанту
Тип лінії для побудови кривої графіка
Товщина лінії (пікселів)
Колір лінії
Шрифт розмітки осей графіка
9
4
Cyan
Small
Текст програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
double ScreenW, ScreenH;
private float devX;
private float devY;
private float[,] GrapValuesArray;
private int elements_count = 0;
private bool not_calculate = true;
private int pointPosition = 0;
public Form1()
{
InitializeComponent();
OnGl.InitializeContexts();
}
private void OnGl_Load(object sender, EventArgs e)
{
}
private void PointInGrap_Tick(object sender, EventArgs e)
{
if (pointPosition == elements_count - 1)
pointPosition = 0;
Draw();
pointPosition++;
}
private void Form1_Load(object sender, EventArgs e)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE);
Gl.glClearColor(255, 255, 255, 1);
Gl.glViewport(0, 0, OnGl.Width, OnGl.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
if ((float)OnGl.Width <= (float)OnGl.Height)
{
ScreenW = OnGl.Width;
ScreenH = OnGl.Width * (float)OnGl.Height / (float)OnGl.Width;
Glu.gluOrtho2D(0.0, ScreenW, 0.0, ScreenH);
}
else
{
ScreenW = OnGl.Height * (float)OnGl.Width / (float)OnGl.Height;
ScreenH = OnGl.Height;
Glu.gluOrtho2D(0.0, OnGl.Width * (float)OnGl.Width / (float)OnGl.Height, 0.0, OnGl.Height);
}
devX = (float)ScreenW / (float)OnGl.Width;
devY = (float)ScreenH / (float)OnGl.Height;
Gl.glMatrixMode(Gl.GL_MODELVIEW);
PointInGrap.Start();
}
private void PrintText2D(float x, float y, string text)
{
Gl.glRasterPos2f(x, y);
foreach (char char_for_draw in text)
{
Glut.glutBitmapCharacter(Glut.GLUT_BITMAP_HELVETICA_12, char_for_draw);
}
}
private void functionCalculation()
{
float x = 0, y = 0;
GrapValuesArray = new float[30000, 2];
elements_count = 0;
for (x = -500; x <= 500; x += 1.0f)
{
y = (float)Math.Abs(Math.Pow(x, 3));
GrapValuesArray[elements_count, 0] = x;
GrapValuesArray[elements_count, 1] = y;
...